package com.example.myspringboot.service.impl;

import cn.hutool.core.io.IORuntimeException;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.example.myspringboot.service.SendLinkToThirdService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * @author cy
 * @date 2024/1/5
 */
@Service
public class SendLinkToThirdServiceImpl implements SendLinkToThirdService {
    private static final Log log = LogFactory.get();

    @Value("${app.name}")
    private String appName;

    @Value("${app.timeout}")
    private int timeout;

    @Override
    public String one(String info) {
        // 打印应用名称和参数信息
        log.info("{} 参数信息: {}", appName, info);

        // 解析参数为 JSON 对象
        JSONObject req = JSONUtil.parseObj(info);

        // 获取请求的 URL
        String url = req.getStr("url");

        // 清空 URL 字段，以免重复发送
        req.set("url", null);

        String res = null;
        try {
            // 创建一个 POST 请求
            HttpRequest post = HttpUtil.createPost(url);

            // 设置请求头
           // 创建一个HashMap用于存储HTTP请求头信息
            Map<String, String> headers = new HashMap<>();

            // 设置请求头Content-Type为application/json，同时指定字符集为UTF-8
            headers.put("Content-type", "application/json;charset=UTF-8");

            // 设置请求头Accept为application/json，表明客户端期望接收的数据格式为JSON
            headers.put("Accept", "application/json");

            // 设置请求头Charset为UTF-8，确保传输过程中字符编码的一致性
            headers.put("Charset", "UTF-8");

            // 将创建好的请求头添加到POST请求中
            post.addHeaders(headers);

            // 设置POST请求的请求体为JSON格式字符串（req对象转换得到）
            post.body(req.toString());

            // 设置POST请求的超时时间，单位为毫秒（例如：若timeout为5，则设置超时时间为5秒）
            post.timeout(timeout * 1000);

            // 执行请求并获取响应结果
            res = post.execute().body();
        } catch (IORuntimeException e) {
            // 处理异常情况，例如交易超时
            log.error(e.getMessage(), e);

            // 创建一个响应结果的 JSON 对象
            JSONObject resJSON = JSONUtil.createObj();
            resJSON.set("code", "T901");
            resJSON.set("msg", "交易超时");

            // 返回响应结果的字符串表示
            return resJSON.toString();
        }

        // 打印应用名称和返回参数
        log.info("{}返回参数:{}", appName, res);


        // 返回响应结果
        return res;
    }

}
